# 定义非空字典，包含姓名、年龄、性别、爱好（爱好中又包含阅读和运动的嵌套结构）
info = {
    "name": "tom",
    "age": 18,
    "gender": "男",
    "hobby": {"read": "小说", "sport": ["篮球", "足球"]}
}

# 查询年龄（方式1：通过键直接访问）
# a1 = info["age"]
# print(a1)
print(info["age"])
# 查询年龄（方式2：通过get方法访问）
# a2 = info.get("age")
# print(a2)
print(info.get("age"))

# 尝试查询不存在的键"aa"（方式1：通过键直接访问，会报错）
# print(info["aa"])  # 代码报错: KeyError: 'aa'  键aa不存在
# 尝试查询不存在的键"aa"（方式2：通过get方法访问，返回None）
print(info.get("aa"))  # None 表示aa键不存在

# 思考：如何获取值"足球"（通过多层嵌套的键和下标访问）
# a1 = info["hobby"]
# print(a1)  # {'read': '小说', 'sport': ['篮球', '足球']}
# print(a1["sport"])  # ['篮球', '足球']
# print(a1["sport"][1])
# 组合：从外部一层一层获取递进（方式1：通过键直接访问）
print(info["hobby"]["sport"][1])
# 组合：从外部一层一层获取递进（方式2：通过get方法访问）
print(info.get("hobby").get("sport")[1])

# 结论：
# 1. 键存在时，通过键直接访问和get方法无区别；如果键不存在，get方法直接返回None，但是通过键直接查询会报错